﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Capa_Negocio.Gestionar_SalaEnsayo;
using Capa_Dominio;

namespace Studio7i.Controllers
{
    public class SalaController : Controller
    {
        // GET: /Sala/
        #region Dependencias que se inyectan con Spring.NET
        IAdministracionSalaEnsayo AdminService = null;
        #endregion 

        public ActionResult Index()
        {
            ICollection<SalaEnsayo> modelo = AdminService.ListarSalas(null, null, null, null);
            TempData["locales"] = ListadoLocales();
            return View(modelo);
        }

        private ICollection<SelectListItem> ListadoLocales()
        {
            ICollection<SelectListItem> locales = new List<SelectListItem>();
            locales.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione.." });
            foreach (Local local in AdminService.ListarLocales())
                locales.Add(new SelectListItem()
                {
                    Value = local.CodigoLocal.ToString(),
                    Text = local.NombreLocal
                });
            return locales;
        }
        //
        // GET: /Sala/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }
        //
        // GET: /Sala/Create

        public ActionResult Create()
        {
            TempData["locales"] = ListadoLocales();
            return View();
        } 
        //
        // POST: /Sala/Create
        [HttpPost]
        public ActionResult Create(FormCollection formulario)
        {
            try
            {
                string Nombre = formulario["NombreSala"];
                if (formulario["LocalCodig"] == null || formulario["LocalCodig"] == string.Empty)
                    throw new Exception("Elija un local");
                int LocalCodigo = int.Parse(formulario["LocalCodig"]);
                int Capacidad = int.Parse(formulario["Capacidad"]);
                string Caracteristicas = formulario["Caracteristicas"];
                string Comentarios = formulario["Comentarios"];
                Boolean Disponibilidad = true;// Boolean.Parse(formulario["Disponibilidad"]);
                SalaEnsayo salaInscrita = AdminService.InscribirSala(Nombre, LocalCodigo, Capacidad, Caracteristicas, Disponibilidad, Comentarios, true);
                TempData["mensaje"] = "Sala " + salaInscrita.CodigoSala + " inscrita satisfactoriamente";
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                TempData["locales"] = ListadoLocales();
                return View("Inscripcion");
            }
        }
        //
        // GET: /Sala/Edit/5

        public ActionResult Edit(int id)
        {
            return View(AdminService.ObtenerSala(id));
        }
        //
        // POST: /Sala/Edit/5
        [HttpPost]
        public ActionResult Edit(FormCollection formulario)
        {
            //buscamos el local con lo q se va modificar
            int codigoLocal = int.Parse(formulario["CodigoLocal"]);
            Local localEncontrado = AdminService.ObtenerLocal(codigoLocal);
            SalaEnsayo salaUpdate = new SalaEnsayo() {
                CodigoSala = int.Parse(formulario["CodigoSala"]),
                NombreSala = (string)formulario["NombreSala"],
                Capacidad= int.Parse(formulario["Capacidad"]),
                Caracteristicas = (string)formulario["Caracteristicas"],
                Local = localEncontrado,
                Disponibilidad = true,
                Comentarios = (string)formulario["Comentarios"],
                Estado = true
            };
            try
            {
                SalaEnsayo salaModificado = AdminService.ModificarSala(salaUpdate);
                TempData["mensaje"] = "Sala " + salaModificado.CodigoSala + " modificado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {

                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Creacion", salaUpdate); // Problemas! De nuevo a Modificacion.aspx
            }
        }

        //
        // GET: /Sala/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /Sala/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
